

# 可变参数
"""
1. 概念 ： 通过定义为可变参数，传入的参数数量就是可变化的 。
2. 分类 ： 元组形式的可变参数 ，字典形式的可变参数
3. 元组形式的可变参数 ：
    (1). 定义 ： 在参数名前加一个* , 传进来的值就变为一个元组 。
    (2). 传值 ：可以以位置参数传递 ，也可以以元组或列表形式传递，前提是必须元组或列表前加*

4. 字典形式的可变参数
    (1). 定义 ：在参数名前加上两个* ,传进来的值变为一个字典 。
    (2). 传值 : 可以以关键字参数传递 ，也可以以字典形式传递 ，前提必须是在字典前加** 。
"""

print()

# 需求 ：加法的操作 ，用户是可以随意输入任何个数相加的
def add(x,y,*args):
    print("args:",args)
    z = x + y + sum(args)
    return z

print(add(3,4))
print(add(3,4,5))
print(add(3,4,5,6,7,8,9,10))

# 以列表形式或元组的形式传递
print(add(3,4,*[4,5,6,7]))          # 必须是在前面加*代表是列表里的数
print(add(3,4,*(4,5,6,7)))          # 必须是在前面加*元组是列表里的数


# 需求 ：加法的操作 ，用户可以随便传任何值。
def add1(a,b,**kwargs):
    print("kwargs:",kwargs)
    z = 0
    for x in kwargs.values():
        z += x
    z += a +b
    return z


print("="*50)
print(add1(3,4))
print(add1(3,4,c=5))
print(add1(3,4,c=5,d=6,k=7))

print(add1(3,4,**{'c':5,'d':6,'z':7}))


def fun(*args,**kwargs):
    pass
